/**
 * @Auther: ChenforCode
 * @Date: 2018/9/12 00:03
 * @Description:
 */
package cn.chenforcode.dao;

import cn.chenforcode.entity.StuAdmin;
import oracle.jdbc.OracleType;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.SessionFactoryUtils;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.sql.CallableStatement;
import java.sql.SQLException;
import java.util.List;

@Repository
@Transactional
public class StuAdminDAO {
    @Autowired
    private SessionFactory sessionFactory;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    /**
     * @return void
     * @Author ChenforCode
     * @Description //TODO 新增一个用户管理员
     * @Date 0:05 2018/9/12
     * @Param [stuAdmin]
     **/
    public void addStuAdmin(StuAdmin stuAdmin) {
        this.getSession().save(stuAdmin);
    }

    /**
     * @return int
     * @Author ChenforCode
     * @Description //TODO 判断是否可以新增学生管理员 //有问题
     * @Date 0:07 2018/9/12
     * @Param [saname]
     **/
    public int queryCanAdd(String saname) {
        CallableStatement statement = null;
        int retValue = 0;
        try {
            statement = SessionFactoryUtils.getDataSource(sessionFactory)
                    .getConnection().prepareCall("{call queryadstcanadd(?,?)}");
            statement.setString(1, saname);
            statement.registerOutParameter(2, OracleType.NUMBER);
            statement.execute();
            retValue = statement.getInt(2);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            return retValue;
        }
    }

    /**
     * @return java.util.List<cn.chenforcode.entity.StuAdmin>
     * @Author ChenforCode
     * @Description //TODO 获取所有的学生管理员
     * @Date 0:13 2018/9/12
     * @Param []
     **/
    public List<StuAdmin> getAllStuAdmin() {
        return this.getSession().createQuery("from StuAdmin").list();
    }

    /**
     * @return cn.chenforcode.entity.StuAdmin
     * @Author ChenforCode
     * @Description //TODO 根据学生管理员账号获取该对象
     * @Date 0:32 2018/9/12
     * @Param [saname]
     **/
    public StuAdmin getStuAdminBySaname(String saname) {
        return (StuAdmin) this.getSession().createQuery("from StuAdmin where saname = ?1")
                .setParameter(1, saname).uniqueResult();
    }

    /**
     * @return void
     * @Author ChenforCode
     * @Description //TODO 删除学生管理员
     * @Date 11:49 2018/9/13
     * @Param [saname]
     **/
    public void delStuAdmin(String saname) {
        this.getSession().createQuery("delete StuAdmin where saname = ?1")
                .setParameter(1, saname).executeUpdate();
    }

    /**
     * @return void
     * @Author ChenforCode
     * @Description //TODO 更新学生管理员
     * @Date 12:52 2018/9/13
     * @Param [stuAdmin]
     **/
    public void upStuAdmin(StuAdmin stuAdmin) {
        this.getSession().update(stuAdmin);
    }
}
